like, case insensitive, cestina

Otázka od: ing. Petr Borkovec

8. 11. 2004 15:27

Delphi 7, InterBase WI - 06.0.1.6.
Potrebuji prohledat pole tabulky, aby hledani bylo case insensitive a
fungovalo v cestine. Pole je varchar(10000). Tabulku ctu komponentou
IBQuery, pro hledani vkladam do jeji vlastnosti SQL
'select * from
tab_archiv where UPPER(OBSAH) LIKE upper(_WIN1250'hodnota1.Text')',do
hodnota1.text davam '%toto je treba najit%'.Takto je vysledek hledani case
insensitive pro vsechna pismena s vyjimkou pismen s diakritikou, kde to
zustava case sensitive. Mohl by nekdo poradit?

Odpovedá: Tomas Krejzek

8. 11. 2004 16:18


Musis si udelat upper uz nad tim textem v aplikaci, tj. v C++ Builderu
hodnota1.text.UpperCase() predpokladam ze v Delphi je to to samy
Tomas

>hodnota1.text davam '%toto je treba najit%'.Takto je vysledek hledani case
>insensitive pro vsechna pismena s vyjimkou pismen s diakritikou, kde to
>zustava case sensitive. Mohl by nekdo poradit?
>
>
>
>
>



Odpovedá: ing. Petr Borkovec

10. 11. 2004 21:36

Zkusil jsem, co napsal Tomas - to nepomohlo. Problem je zrejme v tom, ze v
tom 'select * from tab_archiv where UPPER(OBSAH) LIKE '%TOTO JE TREBA
NAJIT%'' to UPPER(OBSAH)prevadi na velka pismena jen znaky bez diakritiky -
ale nevim, jak to vyresit.

> Musis si udelat upper uz nad tim textem v aplikaci, tj. v C++ Builderu
> hodnota1.text.UpperCase() predpokladam ze v Delphi je to to samy
> Tomas

> > Delphi 7, InterBase WI - 06.0.1.6.
> > Potrebuji prohledat pole tabulky, aby hledani bylo case insensitive a
> > fungovalo v cestine. Pole je varchar(10000). Tabulku ctu komponentou
> > IBQuery, pro hledani vkladam do jeji vlastnosti SQL
'select * from
> > tab_archiv where UPPER(OBSAH) LIKE upper(_WIN1250'hodnota1.Text')',do
> > hodnota1.text davam '%toto je treba najit%'.Takto je vysledek hledani
case
> > insensitive pro vsechna pismena s vyjimkou pismen s diakritikou, kde to
> > zustava case sensitive. Mohl by nekdo poradit?





Odpovedá: Jiri Cincura

10. 11. 2004 23:00

ing. Petr Borkovec wrote:
> NAJIT%'' to UPPER(OBSAH)prevadi na velka pismena jen znaky bez diakritiky
> - ale nevim, jak to vyresit.

Presne tak. Kdysi jsem to resil a na nic jineho jsem neprisel. Laboroval
jsem s SQL (nic) s nastavenim DB (nic, ale na tohle bych sazel) s nastavenim
komponent (nic, uz jsem byl zoufaly).

Ja to vyresil tak, ze - vzhledem k tomu, ze se nic nezobrazovalo, jen
hledalo jako vazebna relace - jsem to do DB cpal rovnou vsechno velke. Dost
divne, ale jedine co znam.

Mozna Pavel Cisar bude neco vedet.

--
  Jiri Cincura
  e-mail: mailto:jiri@cincura.net; | http://www.cincura.net/
  mailto:xcincura@informatics.muni.cz | http://photo.cincura.net/
   ICQ: 314711544 | http://phorum.cincura.net/
 ---
  And if our times are difficult and perplexing,
  so are they challenging and filled with opportunity.
                                            -Robert F. Kennedy, 1961



Odpovedá: Kalhous

11. 11. 2004 5:52

> ing. Petr Borkovec wrote:
>> NAJIT%'' to UPPER(OBSAH)prevadi na velka pismena jen znaky bez diakritiky
>> - ale nevim, jak to vyresit.
Nezachytil jsem puvodni dotaz ale pokud se jedna o IB nebo FB tak prevod
znaku s diakritikou na velka funguje takto
UPPER(OBSAH COLLATE PXW_CSY)
samozrejme kdyz je to cestina, pro jine jazyky jiny collate. A drobnost -
nektere IB/FB nesnaseji kdyz je UPPER v ORDER BY frazi.


Odpovedá: Tomas Krejzek

11. 11. 2004 8:19

A jak mas nadefinovane ty polozky v databazich, mas je v CP-1250 a v
PXW_CSY, protoze ja jsem si to zkousel u sebe a tam to tu cestinu zvlada
naprosto bez problemu.
Tom

ing. Petr Borkovec napsal(a):

>Zkusil jsem, co napsal Tomas - to nepomohlo. Problem je zrejme v tom, ze v
>tom 'select * from tab_archiv where UPPER(OBSAH) LIKE '%TOTO JE TREBA
>NAJIT%'' to UPPER(OBSAH)prevadi na velka pismena jen znaky bez diakritiky -
>ale nevim, jak to vyresit.
>
>
>
>>Musis si udelat upper uz nad tim textem v aplikaci, tj. v C++ Builderu
>>hodnota1.text.UpperCase() predpokladam ze v Delphi je to to samy
>>Tomas
>>
>>
>
>
>
>>>Delphi 7, InterBase WI - 06.0.1.6.
>>>Potrebuji prohledat pole tabulky, aby hledani bylo case insensitive a
>>>fungovalo v cestine. Pole je varchar(10000). Tabulku ctu komponentou
>>>IBQuery, pro hledani vkladam do jeji vlastnosti SQL
'select * from
>>>tab_archiv where UPPER(OBSAH) LIKE upper(_WIN1250'hodnota1.Text')',do
>>>hodnota1.text davam '%toto je treba najit%'.Takto je vysledek hledani
>>>
>>>
>case
>
>
>>>insensitive pro vsechna pismena s vyjimkou pismen s diakritikou, kde to
>>>zustava case sensitive. Mohl by nekdo poradit?
>>>
>>>
>
>
>
>
>
>
>
>
>
>
>
>



Odpovedá: ing. Petr Borkovec

14. 11. 2004 22:00

Dekuji za odpovedi Jirkovi, Tomasovi a Kalhousovi - nic ale nepomohlo. Mozna
take neni muj dotaz jasny. Potrebuji prohledat pole tabulky typu
varchar(1000), vyskyt nikoli jen na zacatku ale i uprostred retezce, v
cestine (character set WIN1250), aby to bylo case insensitive.


> Zkusil jsem, co napsal Tomas - to nepomohlo. Problem je zrejme v tom, ze
v
> tom 'select * from tab_archiv where UPPER(OBSAH) LIKE '%TOTO JE TREBA
> NAJIT%'' to UPPER(OBSAH)prevadi na velka pismena jen znaky bez
diakritiky -
> ale nevim, jak to vyresit.

> Musis si udelat upper uz nad tim textem v aplikaci, tj. v C++ Builderu
> hodnota1.text.UpperCase() predpokladam ze v Delphi je to to samy
> Tomas

> > Delphi 7, InterBase WI - 06.0.1.6.
> > Potrebuji prohledat pole tabulky, aby hledani bylo case insensitive a
> > fungovalo v cestine. Pole je varchar(10000). Tabulku ctu komponentou
> > IBQuery, pro hledani vkladam do jeji vlastnosti SQL
'select * from
> > tab_archiv where UPPER(OBSAH) LIKE upper(_WIN1250'hodnota1.Text')',do
> > hodnota1.text davam '%toto je treba najit%'.Takto je vysledek hledani
case
> > insensitive pro vsechna pismena s vyjimkou pismen s diakritikou, kde to
> > zustava case sensitive. Mohl by nekdo poradit?


Odpovedá: Ing. Miroslav Vopalecky

14. 11. 2004 22:46

Ahoj.
Pro mlhave vyhledavani pouzivam ve spojeni s FireBirdem nasledujici kod
obsahujici NazevUdaje CONTAINING HledanyText:

procedure TfrmGrid.PodTextClick(Sender: TObject);
var st,st1,st2,st3,st4,st5,st6:string;
    va1:variant;
begin
  try
  st:= InputBox('Zadani podmnoziny', 'Zadej hledany text:', '');
  st1:=SQLKod;
  st2:=DBGrid1.SelectedField.FieldName;
  va1:=st;
  if VarIsNull(va1) then
    begin st4:='('+st2+' is null)'; end else begin st4:=va1;
st4:='('+st2+'
CONTAINING '''+st4+''''+')'; end;
  if SQLVyber<>'' then
    begin st5:=' WHERE '+SQLVyber+' AND '+st4; SQLVyber:=SQLVyber+' AND
'+st4;
end
    else begin st5:=' WHERE '+st4; SQLVyber:=st4; end;
  if SQLOrder<>'' then begin st6:=' ORDER BY '+SQLOrder; end else begin
st6:=''; end;
  st3:=st1+st5+st6;
  panel1.Caption:=st5+st6;
  panel1.Repaint;
  DM1.IBQZP01.SQL.Text:=st3;
  DM1.IBQZP01.Close;
  DM1.IBQZP01.Open;
  repaint;
  DM1.IBQZP01.fields.FindField(st2).FocusControl;
  except
    showmessage(self.Name+' Chyba podmnoziny.');
  end;
end;
S pozdravem Mirek Vopalecky, D7 W2000

|-----Original Message-----
|From: delphi-l-owner@clexpert.cz
|[mailto:delphi-l-owner@clexpert.cz] On Behalf Of ing. Petr Borkovec
|Sent: Sunday, November 14, 2004 10:00 PM
|To: delphi-l@clexpert.cz
|Subject: Re: like, case insensitive, cestina
|
|
|Dekuji za odpovedi Jirkovi, Tomasovi a Kalhousovi - nic ale
|nepomohlo. Mozna take neni muj dotaz jasny. Potrebuji
|prohledat pole tabulky typu varchar(1000), vyskyt nikoli jen
|na zacatku ale i uprostred retezce, v cestine (character set
|WIN1250), aby to bylo case insensitive.
|
|
|> Zkusil jsem, co napsal Tomas - to nepomohlo. Problem je
|zrejme v tom,
|> ze
|v
|> tom 'select * from tab_archiv where UPPER(OBSAH) LIKE '%TOTO
|JE TREBA
|> NAJIT%'' to UPPER(OBSAH)prevadi na velka pismena jen znaky bez
|diakritiky -
|> ale nevim, jak to vyresit.
|
|> Musis si udelat upper uz nad tim textem v aplikaci, tj. v
|C++ Builderu
|> hodnota1.text.UpperCase() predpokladam ze v Delphi je to to
|samy Tomas
|
|> > Delphi 7, InterBase WI - 06.0.1.6.
|> > Potrebuji prohledat pole tabulky, aby hledani bylo case
|insensitive
|> > a fungovalo v cestine. Pole je varchar(10000). Tabulku ctu
|> > komponentou IBQuery, pro hledani vkladam do jeji vlastnosti SQL
|> >
'select * from tab_archiv where UPPER(OBSAH) LIKE
|> > upper(_WIN1250'hodnota1.Text')',do
|> > hodnota1.text davam '%toto je treba najit%'.Takto je
|vysledek hledani
|case
|> > insensitive pro vsechna pismena s vyjimkou pismen s
|diakritikou, kde
|> > to zustava case sensitive. Mohl by nekdo poradit?


Odpovedá: Jiri Cincura

14. 11. 2004 23:08

No ale to nam porad neresi to, ze UPPER(sloupec) kde sloupec obsahuje
diakritiku neudela z ceskych znaku velke.

--
  Jiri Cincura
  e-mail: mailto:jiri@cincura.net; | http://www.cincura.net/
  mailto:xcincura@informatics.muni.cz | http://photo.cincura.net/
   ICQ: 314711544 | http://phorum.cincura.net/
 ---
  And if our times are difficult and perplexing,
  so are they challenging and filled with opportunity.
                                            -Robert F. Kennedy, 1961



Odpovedá: Jiri Cincura

14. 11. 2004 23:10

ing. Petr Borkovec wrote:
> Dekuji za odpovedi Jirkovi, Tomasovi a Kalhousovi - nic ale nepomohlo.

Hele tohle funguje!!!!!!!!!!!!!!!!!!!!!!!!!!
 select upper(id collate PXW_CSY) from pokus;

i diakritiku mi to prevedlo



--
  Jiri Cincura
  e-mail: mailto:jiri@cincura.net; | http://www.cincura.net/
  mailto:xcincura@informatics.muni.cz | http://photo.cincura.net/
   ICQ: 314711544 | http://phorum.cincura.net/
 ---
  And if our times are difficult and perplexing,
  so are they challenging and filled with opportunity.
                                            -Robert F. Kennedy, 1961



Odpovedá: Jiri Cincura

14. 11. 2004 23:16

Teda tohle mi jede:

select * from pokus where upper(id collate PXW_CSY) like '%C%';


--
  Jiri Cincura
  e-mail: mailto:jiri@cincura.net; | http://www.cincura.net/
  mailto:xcincura@informatics.muni.cz | http://photo.cincura.net/
   ICQ: 314711544 | http://phorum.cincura.net/
 ---
  And if our times are difficult and perplexing,
  so are they challenging and filled with opportunity.
                                            -Robert F. Kennedy, 1961



Odpovedá: Kalhous

15. 11. 2004 8:25

No to jsem prave presvedceny ze to musi byt napsano takto:
...where UPPER(OBSAH COLLATE PXW_CSY) LIKE '%TOTO JE TREBA NAJIT%'
a prekvapuje me ze to nefunguje. Mozna je to verzi serveru, jak jsem uz psal
tak ke svemu
zdeseni jsem zjistil ze nektere verze serveru nesnaseji treba UPPER v ORDER
BY zatimco
jinym to nevadi.
----- Original Message -----
>> tom 'select * from tab_archiv where UPPER(OBSAH) LIKE '%TOTO JE TREBA
>> NAJIT%'' to UPPER(OBSAH)prevadi na velka pismena jen znaky bez
> diakritiky -


Odpovedá: Jiri Cincura

15. 11. 2004 8:31

Kalhous wrote:
> psal tak ke svemu zdeseni jsem zjistil ze nektere verze serveru nesnaseji

No na FB 1.5.1 mi to jede.

A na IB (verze co je s D7 ;)) taky.

Tak jinak uz pak nevim.

--
  Jiri Cincura
  e-mail: mailto:jiri@cincura.net; | http://www.cincura.net/
  mailto:xcincura@informatics.muni.cz | http://photo.cincura.net/
   ICQ: 314711544 | http://phorum.cincura.net/
 ---
  And if our times are difficult and perplexing,
  so are they challenging and filled with opportunity.
                                            -Robert F. Kennedy, 1961